闲扯
我做这道题的时候究极脑瘫。。
第一次提交忘开 $long\ long$ ,只有 $50$ 分;
第二次提交输出忘开 $long\ long$ ,只有 $70$ 分。。。
无语至极。。
题面
Solution
要找出一个点,使得 $\sum\limits_{j!=rt} dis_j\cdot c_j$ 最小。
考虑换根。
先求出以 $1$ 号点为根节点时的答案,同时记录子树里面的奶牛数。对于每一条边,它的贡献为 $val\cdot size_{to}$ 。
然后 $DFS$ 换根。考虑将根节点转至 $u$ 时,只有 $rt$ 连向 $u$ 的边会改变答案。具体的:
- 对于以 $u$ 为根结点的子树所包含的奶牛,他们要走的路程减少了 $val$ ,对于答案的贡献要减去 $size_u\cdot val$ 。
- 对于其他的奶牛,他们要走的路程增加了 $val$ ,对于答案的贡献要加上 $(size_1-size_u)\cdot val$ 。(因为 $size_1$ 表示奶牛的总数)
然后最后的答案为 $\min\limits_{i=1}^n ans_i$ 。
Code
1 |
|
总结
做题一定要算好数据范围,确定好是使用 $int$ 还是用 $long\ long$ ,不然炸了就不好了。